package com.lqf.redpackage.dao;

import com.lqf.redpackage.domain.TRedPacket;
import com.lqf.redpackage.domain.TRedPacketExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;

@Repository
public interface TRedPacketMapper {
    long countByExample(TRedPacketExample example);

    int deleteByExample(TRedPacketExample example);

    int deleteByPrimaryKey(Integer id);

    int insert(TRedPacket record);

    int insertSelective(TRedPacket record);

    List<TRedPacket> selectByExampleWithRowbounds(TRedPacketExample example, RowBounds rowBounds);

    List<TRedPacket> selectByExample(TRedPacketExample example);

    TRedPacket selectByPrimaryKey(Integer id);

    int updateByExampleSelective(@Param("record") TRedPacket record, @Param("example") TRedPacketExample example);

    int updateByExample(@Param("record") TRedPacket record, @Param("example") TRedPacketExample example);

    int updateByPrimaryKeySelective(TRedPacket record);

    int updateByPrimaryKey(TRedPacket record);

    /**
     * 获取红包信息.
     * @param id --红包id
     * @return 红包具体信息
     */
    TRedPacket getRedPacket(Long id);

    /**
     * 扣减抢红包数.
     * @param id -- 红包id
     * @return 更新记录条数
     */
    int decreaseRedPacket(Long id);

    /**
     * 获取红包信息. 悲观锁的实现方式
     *
     * @param id
     *            --红包id
     * @return 红包具体信息
     */
     TRedPacket getRedPacketForUpdate(Long id);

    /**
     * @Description: 扣减抢红包数. 乐观锁的实现方式
     *
     * @param id
     *            -- 红包id
     * @param version
     *            -- 版本标记
     *
     * @return: 更新记录条数
     */
    public int decreaseRedPacketForVersion(@Param("id") Long id, @Param("version") Integer version);

}